var w_ =0;
var h_ =0;
var zoom = 11;
var tile_size = 128;
function start_map()
{
    
    w_ = 827;
    h_ = 550;
    YMaps.load(["regions", "hotspots"], on_ya_load());
    //replace it
    create_admin_div();
}
var map;
var visible_tiles = new Array();

function getTilesInfo()
{
    
}

function on_ya_load()
{
    // Создание обработчика для события window.onLoad
    YMaps.jQuery(function () {
        // Создание экземпляра карты и его привязка к созданному контейнеру
        map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]);
        map.setType(YMaps.MapType.SATELLITE);
        // Установка для карты ее центра и масштаба
        map.setCenter(new YMaps.GeoPoint(37.64, 55.76), zoom);
        //map.setCenter(new YMaps.GeoPoint(100, 100), 12);
        map.disableDblClickZoom();
        map.disableHotKeys();

        map.disableRightButtonMagnifier();
        map.disableRuler();
        map.disableScrollZoom();

        YMaps.Events.observe(map,map.Events.Update, onUpdate);
        YMaps.Events.observe(map,map.Events.Move, onMove);
        onUpdate(map);
        draw_Interface();
    })

}


var lib_ground_type = {

    1:"<img alt='трава' src='/img/ground_icon/1.png'></img>трава",
    2:"<img alt='земля' src='/img/ground_icon/2.png'></img>земля",
    3:"<img alt='песок' src='/img/ground_icon/3.png'></img>песок",
    4:"<img alt='горы' src='/img/ground_icon/4.png'></img>горы",
    5:"<img alt='вода' src='/img/ground_icon/5.png'></img>вода"
    
};
function drawadmindata(o)
{
    var txt = '';
    txt = txt + lib_ground_type[o.ground_type];
    return txt;
}

function onloadDataRaw(data)
{
    if(data && data.response && data.response.tiles)
    {
        for(var i in data.response.tiles)
        {
            target_div = _getE('udiv_s'+data.response.tiles[i].x+'_'+data.response.tiles[i].y)
            if(target_div)
                target_div.innerHTML = drawadmindata(data.response.tiles[i]);
        }
    }
    
}

function loadDataRaw()
{
    if(visible_tiles && visible_tiles.length)
    {
        var data = {};
        data.method = 'admin';
        data.submethod = 'getTilesInfo';
        data.tiles = visible_tiles;
        exec(data,onloadDataRaw)
    }
}
load_timer = false;
function loadData()
{

    if(load_timer)clearTimeout(load_timer);
    load_timer = setTimeout(loadDataRaw, 100);
}

function onUpdate(d)
{
    onMove(d)

}

function xget(id)
{
    var r = document.getElementById(id)
    if(r) return r;
    r = document.createElement('DIV');
    document.body.appendChild(r);
    r.id = id;
    return r;
}
var divs_to_delete_on_update = new Array();
function drawLines(x,y,w,n)
{
    for(var i in divs_to_delete_on_update)
        {
            document.body.removeChild(_getE(divs_to_delete_on_update[i]));
        }
        divs_to_delete_on_update = [];
    var str = n+'';
    var re=new RegExp("(.*),(.*)","i");
    result=re.exec(str);

    nx = RegExp.$1
    ny = RegExp.$2

    var xtiles = 8;
    var ytiles = 6;

    for(var i=0;i<xtiles;i++)
    {
        var line = xget('line'+i);
        line.style.position = 'absolute';
        line.style.width = '1px';
        line.style.height = '100%';
        line.style.display = 'block';
        line.style.backgroundColor = '#fafafa';
        line.style.background = 'url(img/line.png) top left repeat-y'
        line.style.top = 0;
        line.className = 'set';
        line.style.left = w*i-x;

    }
    for(var i=0;i<ytiles;i++)
    {
        var line = xget('line_y'+i);
        line.style.position = 'absolute';
        line.style.height = '1px';
        line.style.lineHeight = '1px';
        line.style.fontSize = '0px';
        line.style.width = '100%';
        line.style.display = 'block';
        line.style.background = 'url(img/line.png) top left repeat-x'
        line.style.top = w*i-y;
        line.className = 'set';
        line.style.left = 0;
    }
    visible_tiles = Array();
    
    for(var i=0;i<7;i++)
    {
        for(var j=0;j<5;j++)
        {
            var left = i*w-x;
            var top = j*w-y;
            
            var x_y = getTileNum(left,top,x,y,nx,ny,w);
            visible_tiles.push([x_y[0],x_y[1]]);
            var div = xget('udiv'+x_y[0]+'_'+x_y[1]);
            var udiv_s = xget('udiv_s'+x_y[0]+'_'+x_y[1]);
            div.style.position = 'absolute';
            div.style.display = 'block';
            div.style.top = top;
            div.className = 'settitle';
            div.style.left = left;

            udiv_s.style.position = 'absolute';
            udiv_s.style.display = 'block';
            udiv_s.style.top = top-0+20;
            udiv_s.className = 'settitle_ground';
            udiv_s.style.left = left;
            divs_to_delete_on_update.push('udiv_s'+x_y[0]+'_'+x_y[1]);
            divs_to_delete_on_update.push('udiv'+x_y[0]+'_'+x_y[1]);
            // replace it
            div.innerHTML = '<div onclick="div_clicked('+x_y[0]+','+x_y[1]+',this)">'+x_y[0]+' '+x_y[1]+'</div>';
        }
    }
}

// replace it
function change_water_type()
{
    
}
// replace it
function div_clicked(x,y,divid)
{
    var data = {};
    data.method = 'admin';
    data.submethod = 'set_tile';
    data.x = x;
    data.y = y;
    data.ground_type = _getE('ground_type').value;
    data.water_type = 0;
    exec(data, on_set_tile)
}

function on_set_tile(data)
{
    if(data && data.response && data.response.result && data.response.result == 'ok')
    {
        loadData();
    }
}

function create_admin_div()
{
    div = xget('admin_div');
    div.innerHTML = 'тип земли<select id="ground_type">\n\
<option value="1">трава</option>\n\
<option value="2">земля</option>\n\
<option value="3">песок</option>\n\
<option value="4">горы</option>\n\
<option value="5">вода</option>\n\
</select>';
    div.innerHTML += 'тип воды<select id="water_type">\n\
<option value="1">1</option>\n\
<option value="2">2</option>\n\
<option value="3">3</option>\n\
<option value="4">4</option>\n\
<option value="5">5</option>\n\
</select>';
}




function getTileNum(x,y,tx,ty,txid,tyid,w)
{
    tx = tile_size-tx;
    ty = tile_size-ty;
    //x клетки
    //y клетки
    //tx сдвиг
    //ty сдвиг
    x_d = Math.ceil(((w_/2)+tx-x)/w)
    y_d =  Math.ceil(((h_/2)+ty-y)/w)
    return [txid-(x_d),tyid-(y_d)];
    return (txid-(x_d))+' '+(tyid-(y_d));
    return x+'=x '+y+'=y '+tx+'=tx '+ty+'=ty '+txid+'=txid '+tyid+'=tyid '+w+' '+w_+' '+h_+' '+x_d+' '+y_d;
}

function onMove (map) {
    loadData();
    var pixelsCoords = map.coordSystem.fromCoordPoint(map.getCenter())

    tile = map.tileCoordinates.fromPixels(pixelsCoords, map.getZoom() , tile_size);

    drawLines(tile.offset.x,tile.offset.y,tile_size,tile.number);
//alert("Центра карты находится в тайле № " + tile.number + " со смещением в " + tile.offset.toString());
}